/**
 * Lottie 小程序兼容性处理
 * 解决 Lottie 动态创建 canvas 组件在小程序中的问题
 */

// 检查是否在小程序环境中
const isMiniProgram = () => {
  return typeof wx !== 'undefined' || 
         typeof my !== 'undefined' || 
         typeof swan !== 'undefined' || 
         typeof tt !== 'undefined'
}

// 重写 document.createElement 方法（如果存在）
if (typeof document !== 'undefined' && isMiniProgram()) {
  const originalCreateElement = document.createElement
  
  document.createElement = function(tagName) {
    // 如果尝试创建 canvas，返回一个模拟对象
    if (tagName.toLowerCase() === 'canvas') {
      console.warn('检测到动态创建 canvas，已被拦截以避免小程序兼容性问题')
      
      // 返回一个模拟的 canvas 对象
      return {
        tagName: 'CANVAS',
        width: 0,
        height: 0,
        style: {},
        getContext: () => ({
          clearRect: () => {},
          drawImage: () => {},
          fillRect: () => {},
          strokeRect: () => {},
          beginPath: () => {},
          closePath: () => {},
          moveTo: () => {},
          lineTo: () => {},
          arc: () => {},
          fill: () => {},
          stroke: () => {},
          save: () => {},
          restore: () => {},
          translate: () => {},
          rotate: () => {},
          scale: () => {}
        }),
        addEventListener: () => {},
        removeEventListener: () => {},
        setAttribute: () => {},
        getAttribute: () => null,
        appendChild: () => {},
        removeChild: () => {}
      }
    }
    
    // 其他元素正常创建
    return originalCreateElement.call(this, tagName)
  }
}

// 如果全局存在 lottie 对象，进行兼容性处理
if (typeof window !== 'undefined' && window.lottie && isMiniProgram()) {
  const originalLoadAnimation = window.lottie.loadAnimation
  
  window.lottie.loadAnimation = function(params) {
    console.warn('检测到 Lottie 动画加载，在小程序环境中可能存在兼容性问题')
    
    // 如果指定了容器但没有指定渲染器，强制使用 svg 渲染器
    if (params && !params.renderer) {
      params.renderer = 'svg'
    }
    
    // 如果没有容器，创建一个虚拟容器
    if (params && !params.container) {
      params.container = {
        appendChild: () => {},
        removeChild: () => {},
        style: {}
      }
    }
    
    try {
      return originalLoadAnimation.call(this, params)
    } catch (error) {
      console.error('Lottie 动画加载失败:', error)
      // 返回一个模拟的动画对象
      return {
        play: () => {},
        pause: () => {},
        stop: () => {},
        destroy: () => {},
        setSpeed: () => {},
        setDirection: () => {},
        addEventListener: () => {},
        removeEventListener: () => {}
      }
    }
  }
}

// 导出兼容性检查函数
export const checkLottieCompatibility = () => {
  if (isMiniProgram()) {
    console.log('当前运行在小程序环境，Lottie 兼容性处理已启用')
    return true
  }
  return false
}

// 安全的动画创建函数
export const createSafeAnimation = (config) => {
  if (isMiniProgram() && config.type === 'lottie') {
    console.warn('在小程序环境中跳过 Lottie 动画创建')
    return null
  }
  
  // 在 H5 环境中正常创建动画
  return config
}

export default {
  checkLottieCompatibility,
  createSafeAnimation,
  isMiniProgram
}